package com.demo.java.OD251_300.OD271;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【服务中心选址、服务中心的最佳位置】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146073252
 */
public class OdMain {

    // 存储所有区间的列表
    public static List<int[]> intervalsList = new ArrayList<>();

    public static void main(String[] args) {

        // 创建Scanner对象，用于从控制台读取输入
        Scanner sc = new Scanner(System.in);

        // 输入区间的个数
        int n = sc.nextInt();

        // 读取所有的区间
        for (int i = 0; i < n; i++) {
            int[] interval = new int[2];  // 每个区间由两个整数构成，分别是开始和结束位置
            interval[0] = sc.nextInt();  // 区间的开始位置
            interval[1] = sc.nextInt();  // 区间的结束位置
            intervalsList.add(interval);  // 将该区间添加到区间列表中
        }

        // 按照区间的开始位置升序排列，若开始位置相同则按照结束位置升序排序
        intervalsList.sort((a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]);

        // 最小的开始位置
        int min = intervalsList.get(0)[0];
        // 最大的结束位置
        int max = intervalsList.get(n - 1)[1];

        // 初始化最小结果值为一个较大的数
        int res = Integer.MAX_VALUE;

        // 尝试每一个可能的位置（从min到max之间）
        for (int i = min; i <= max; i++) {
            int currRes = 0;  // 当前选择位置i的总距离

            // 计算每个区间从i到该区间的开始或结束的距离
            for (int[] currInterval : intervalsList) {
                int start = currInterval[0];
                int end = currInterval[1];
                if (i < start) {
                    currRes += start - i;  // 位置i在区间的左边，计算i到区间开始的距离
                } else if (i > end) {
                    currRes += i - end;  // 位置i在区间的右边，计算i到区间结束的距离
                }
            }

            // 更新最小结果
            res = Math.min(res, currRes);
        }

        // 输出最小的总距离
        System.out.println(res);
    }
}
